
// 计算位置 和 长度

import htmlParser from './js-parse-html'

// 传入富文本字符串
/* 
  - 函数入参示例: '你好<span class="user-tag" contenteditable="false" userid="0e3647aaa74552c1dd560fd45e953382b">@职员</span>&nbsp;哼哼<span class="user-tag" contenteditable="false" userid="0e3647aaa74552c1dd560fd45e953382b">@职员</span>&nbsp;魅族17'

  - 进入while 循环的时候: '你好"0e3647aaa74552c1dd560fd45e953382b">@职员< 哼哼"0e3647aaa74552c1dd560fd45e953382b">@职员< 魅族17'
*/
function calcUserList(p) {

  // 赋值粘贴到输入框的时候有多余的标签, 没想到好办法, 暂时把其他的标签替换成空字符串
  p = p.replace(new RegExp('<div>', 'g'), '').replace(new RegExp('</div>', 'g'), '').replace(new RegExp('<br>', 'g'), '')
  
  console.log('p---', p)

  const sss = `<p>` + p + `</p>`
  const doc = htmlParser(sss)
  const childs = doc.getElementsByClassName('user-tag')

  // 拿到艾特的相关人员
  const userList = childs.map(x => ({
    userName: x.innerText,
    userId: x.getAttribute('userid')
  }))

  // replaceAll 在某些浏览器下不兼容, 改成下边的 `replace`
  // const resStr = p.replaceAll('&nbsp;', ' ').replaceAll('<span class="user-tag" contenteditable="false" userid=', '').replaceAll('/span>', '')
  const reg1 = new RegExp('&nbsp;', 'g')
  const reg2 = new RegExp('<span class="user-tag" contenteditable="false" userid=', 'g')
  const reg3 = new RegExp('/span>', 'g')

  const resStr = p.replace(reg1, ' ').replaceAll(reg2, '').replaceAll(reg3, '')

  const User_Id_Length = 32   // userid 的长度

  let startIdx = null, // 记录@的位置
    endIdx = null,
    leftNum = 0,

    countAt = 0 // 记录遍历到了第几个 @

  // console.log('resStr -------------' , resStr)
  /*
    下边的循环是为了获得艾特的人在字符串中的位置和长度, --只是为了给后端传数据
  */
  let i = 0
  while (i < resStr.length) {     // 从字符串第一位开始, 依次向后遍历
    const item = resStr.charAt(i)

    if (item === '>') startIdx = i + 1  // 如果遇到 '>' 代表这里就是要找的人员

    if (item === '<') {
      endIdx = i

      const resLength = endIdx - startIdx - 1 // length

      leftNum++

      const resStartIndex = startIdx - (User_Id_Length + 2 + 1) * leftNum - countAt * 1
      if(userList.length) {     // 如果艾特了人, 才进行位置和长度的赋值
        userList[countAt].startIndex = resStartIndex
        userList[countAt].length = resLength
      }
      countAt++
    }

    i++
  }

  return userList
}

export default calcUserList
